// #include<muduo/net/TcpServer.h>
// #include<muduo/net/Buffer.h>
// #include<muduo/net/TcpConnection.h>
// #include<muduo/net/EventLoop.h>
// #include<iostream>
// #include<string>
// #include<unordered_map>

//  class DicServer
//  {
//     public:
//     //初始化
//     DicServer(int port)
//     :_server(&_baseloop,muduo::net::InetAddress("0.0.0.0",port),"DicServer",muduo::net::TcpServer::kNoReusePort)
//     {
//         //设置连接事件的回调
//         _server.setConnectionCallback(std::bind(&DicServer:: onConnection,this,std::placeholders::_1));
//         // 设置连接消息的回调
//         _server.setMessageCallback(std::bind(&DicServer:: onMessage,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3));
//     }
    
//     void start()
//     {
//         _server.start();//开始监听
//         _baseloop.loop();//开始事件死循环
//     }

//     private:
//      void onConnection(const muduo::net::TcpConnectionPtr&conn)
//      {
//         if(conn->connected())
//         {
//             std::cout<<"连接建立成功"<<std::endl;
//         }
//         else
//         {
//             std::cout << "连接建立失败" << std::endl;
//             return;
//         }
//      }

//      void onMessage(const muduo::net::TcpConnectionPtr&conn,muduo::net::Buffer*_buff,muduo::Timestamp stamp)
//      {
//           //创建字典
//           std::unordered_map<std::string,std::string>dict;
//           dict["hello"] = "你好";
//           dict["dictory"] = "字典";
//           dict["boost"] = "繁荣";

//           //获取请求中的字符串
//           std::string str = _buff->retrieveAllAsString();
//           //开始查找
//           auto it = dict.find(str);
//           std::string ret;
//           if (it == dict.end())
//           {
//               ret = "未知单词";
//           }
//           else
//           {
//               ret = it->second;
//           }

//           conn->send(ret);
//      }

//        //事件监听
//         muduo::net::EventLoop _baseloop;
//         muduo::net::TcpServer _server;
//  };


// int main()
// {
//     DicServer _server(9090);
//     _server.start();
// }

#include<muduo/net/TcpServer.h>
#include<muduo/net/TcpConnection.h>
#include<muduo/net/Buffer.h>
#include<muduo/net/EventLoop.h>
#include<iostream>
#include<unordered_map>
class DictServer
{
    public:
    //构造函数
    DictServer(int port)
    :_server(&_baseloop,muduo::net::InetAddress("0.0.0.0",port),"DictServer",muduo::net::TcpServer::kReusePort)
    {
        //设置连接事件
       _server.setConnectionCallback(std::bind(&DictServer::onConnection,this,std::placeholders::_1));
       //设置消息回应事件
       _server.setMessageCallback(std::bind(&DictServer::onMessage, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
    }

    void onConnection(const muduo::net::TcpConnectionPtr&conn)
    {
          if(conn->connected())
          {
            std::cout<<"连接建立成功"<<std::endl;
          }
          else
          {
            std::cout<<"连接建立失败"<<std::endl;
          }
    }

    void onMessage(const muduo::net::TcpConnectionPtr& conn,muduo::net::Buffer*_buff,const muduo::Timestamp& stamp)
    {
         std::unordered_map<std::string,std::string>dict;
         dict["child"]="小孩";
         dict["password"]="密码";
         dict["gass"] = "草";
        
        std::string str =_buff->retrieveAllAsString();
        auto it = dict.find(str);
        std::string res;
        if(it == dict.end())
        {
          res = "未知单词";
        }
        else
        {
          res = it->second;
        }

        conn->send(res);
    }

    void start()
    {
       _server.start();
       _baseloop.loop();
    }

    private:
      muduo::net::EventLoop _baseloop;
      muduo::net::TcpServer _server;
};      


int main()
{
  DictServer server(9090);
  server.start();
  return 0;
}